class PlanAccion < ActiveRecord::Base
  belongs_to :clase, :polymorphic => true
  belongs_to :evaluado,:foreign_key => :clase_id
  belongs_to :incidente,:foreign_key => :clase_id
  belongs_to :afectado, :class_name => "Usuario"
  belongs_to :responsable, :class_name => "Usuario"
	#has_and_belongs_to_many :usuarios
  named_scope :por_afectado_id, lambda{|id| {:conditions=>{:afectado_id=>id}}}
  named_scope :por_responsable_id, lambda{|id| {:conditions=>{:responsable_id=>id}}}

  validates_presence_of   :accion_planificada, :responsable_id
  
  # attr_writer :responsable_nombre
  # delegate :nombre, :to => :usuario, :prefix => true, :allow_nil => true
  attr_writer :responsable_nombre
  attr_accessor :evaluado_id,:incidente_id 
  delegate :nombre, :to => :cargo, :prefix => true, :allow_nil => true

  ESTADOS_EFECTIVO = ['SI', 'NO', 'En proceso']

  def motivo
    self.clase_id ? self.clase.nombre : "----"
  end
  
  def tipo_motivo_texto
    case self.clase_type
    when 'Evaluado'
      self.evaluado.nombre_para_plan_accion
    when 'Incidente'
      self.incidente.nombre_para_plan_accion
    end
  end
  
  def responsable_nombre
    self.responsable.try(:nombre)
  end
  
  def strf_fecha_cierre
    fecha_cierre.strftime("%d/%m/%Y") if fecha_cierre
  end  

  def strf_fecha_ejecucion
    fecha_ejecucion.strftime("%d/%m/%Y") if fecha_ejecucion
  end

  def self.reporte_completo
    csv_string = FasterCSV.generate do |csv|
      # header row
      csv << ["Funcionario","Area", "Cargo", "Responsable",  "FechaEjecucion",
        "FechaCierre", "AccionPlanificada", "Comentario","Ejecutado",
        "Motivo No Ejecutado","Efectivo","Motivo No Efectivo"]
      # data rows
      planes_accion=self.find(:all,:joins=>[:afectado,:responsable],:order=>"usuarios.nombres").group_by(&:afectado_id)
      planes_accion.each_key do |afectado_id|
        planes_accion[afectado_id].each do |pa|
          csv << [pa.afectado.try(:nombre),pa.afectado.try(:cargo).try(:area).try(:nombre),pa.afectado.try(:cargo).try(:nombre),
            pa.responsable.nombre,  pa.fecha_ejecucion, pa.fecha_cierre, pa.accion_planificada,pa.comentario,pa.ejecutado,pa.motivo_ejecutado,pa.efectivo,pa.motivo_efectivo]
        end
      end

    end
    return csv_string
  end

    def evaluado_id=(val)
      return unless val
      self[:clase_type]='Evaluado'
      self[:clase_id]=val
    end
    def incidente_id=(val)
      return unless val
      self[:clase_type]='Incidente'
      self[:clase_id]=val   
    end
end
